kubernetes 安装—单节点安装
多块网卡安装 kubernetes 请先看多网卡问题
前提条件
Ubuntu Linux 或者 CentOS
安装步骤
参考 基础环境准备
主节点配置
1
2
3
4kubeadm init \
--pod-network-cidr=192.168.0.0/16 \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--ignore-preflight-errors=NumCPU这里使用的网络方案为 Calico 因此
--pod-network-cidr
等于192.168.0.0/16
更多网络方案点击这里和这里如果计算机 CPU 只有一个,需要加参数来忽略错误 –ignore-preflight-errors=NumCPU
可以通过 –kubernetes-version 指定要安装的 kubernetes 版本,比如 –kubernetes-version v1.14.1
如果没有先拉取启动所需要的镜像,那么因为网络关系,需要指定拉取镜像的仓库地址,需要追加参数 –image-repository,比如 –image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
kubernetes 从 1.10 开始没有开放 10255 端口用于监控,如果需要监控需要配置
1
2
3> echo 'readOnlyPort: 10255' >> /var/lib/kubelet/config.yaml
> systemctl restart kubelet
>按照 kubeadm 的要求设置
1
2
3mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config安装网络插件
1
2kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yamlmaster 节点参与调度(多节点可选,单节点必选)
kubeadm 安装的 kubernetes 环境默认情况下 Master 节点不会参与调度,想要让 Master 节点参与调度需要使用下面命令
1
kubectl taint nodes --all node-role.kubernetes.io/master-
或者通过节点名称让 Master 不参与调度
1
2> kubectl taint nodes <master-node-name> node-role.kubernetes.io/master=:NoSchedule
>加入集群(可选)
将一个节点加入集群需要进行基础环境准备,之后使用下面命令将节点添加到集群
1
kubeadm join <master-ip> --token <join-token> --discovery-token-unsafe-skip-ca-verification
<master-ip>
Kubernetes 集群 master 节点所在的 ip 地址,例如: 192.168.17.139:6443<join-token>
为加入 Kubernetes 集群所需要的 token,可以通过kubeadm token list
查看,如果没有,可以通过kubeadm token create
创建 token额外配置(可选)
上述安装配置无法对集权状态进行监控,如需监控功能需要将 10255 端口添加到配置文件,设置方式如下。配置文件在
kubeadm init
或kubeadm join
命令生效后生成,使用kubeadm reset
之后该文件会被删除。1
2echo 'readOnlyPort: 10255' >> /var/lib/kubelet/config.yaml
systemctl restart kubelet
多网卡问题
实验环境最好不要使用多网卡机器,容易出现各种问题
安装 kubernetes
在
安装步骤-> 2. 主节点配置
中使用kubeadm init
来安装 kubernetes,在安装过程中,kubeadm 会自动寻找可用的网卡做为 kubernetes 的服务 ip。如果计算机存在多张网卡,那么有可能选择的网卡并不是预期的网卡。为了解决这个问题,kubeadm 提供了--apiserver-advertise-address
参数来指定网卡的 ip,完整命令如下:1
kubeadm init --apiserver-advertise-address <targetIP> --pod-network-cidr=192.168.0.0/16
–pod-network-cidr=192.168.0.0/16 为 calico 网络插件指定的网段
对于想要加入 kubernetes 集群的节点来,如果有多网卡,也可以使用该参数来指定加入的网卡
1
kubeadm join <k8s-master-ip> --token <token> --apiserver-advertise-address <targetIP>
网络插件选择网卡
除了 kubernetes 以外,网络插件也需要选择网卡来保证节点间容器的通信,不同的网络插件对于网卡的选择不同,具体请查看实际网络插件的文档。这里以
calico
网络插件为例。calico 官方文档calico 对于网卡的选择使用的默认策略是
first-found
,也就是第一块找到的可用的网卡,如果每个节点选择的网卡对应的 ip 不在同一网段,那么很可能出现某一节点上的 pod ping 不通另一节点上的 pod。对于这种情况,可以根据不同方式来自行选择网卡,这里使用的网卡选择策略是
interface
,根据正则表达式来选择网卡,不同的网卡选择策略还是看calico 官方文档。在
kube-system
命令空间下,找到守护进程集(daemonse) calico-node
,其中包含两个 container,为calico-node
container 增加两个环境变量IP_AUTODETECTION_METHOD
和IP6_AUTODETECTION_METHOD
,值为interface=eth0
。保存即可,和下面类似1
2
3
4
5
6
7env:
....
- name: IP_AUTODETECTION_METHOD
value: interface=eth0
- name: IP6_AUTODETECTION_METHOD
value: interface=eth0
....这个环境变量的意思是 calico 选择网卡,根据正则表达式去匹配每个节点上网卡名称,找到的第一个网卡就作为 pod 通信的网卡。这里要选择的网卡就是包含
eht0
的网卡。与此相反,可以使用
skip-interface
来进行配置要跳过哪些网卡